import 'dart:convert';

import 'package:shared_preferences/shared_preferences.dart';

/// 用户信息 - 全局管理
class UserData {
  // 私有的静态变量，保存类的唯一实例
  static final UserData instance = UserData._internal();

  // 私有的构造函数
  UserData._internal();

  // 公开的静态方法，返回类的唯一实例
  factory UserData() {
    return instance;
  }

  // 以下是这个管理器的一些功能，例如保存和读取设置
  String? _settingValue;

  void saveSetting(String value) {
    _settingValue = value;
  }

  String? getSetting() {
    return _settingValue;
  }

  // 用户信息字段

  String token = "";
  bool isNeedGuide = true;
  String guideInvoiceJson = "";

  bool bootIsInvoiceMain = false; // 根是否是发票主页

  /// 私有构造函数
  UserData._();

  /// 清空数据
  void clear() {
    token = "";
  }

  Future<void> saveToken(String value) async {
    token = value;
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setString("token", value);
  }

  Future<String?> getToken() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.getString("token");
  }

  Future<void> saveIsNeedGuide(bool value) async {
    isNeedGuide = value;
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setBool("isNeedGuide", value);
  }

  Future<bool> getIsNeedGuide() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.getBool("isNeedGuide") ?? true;
  }

  // Future<void> saveGuideInvoiceJson(String value) async {
  //   SharedPreferences prefs = await SharedPreferences.getInstance();
  //   prefs.setString("guideInvoiceJson", value);
  // }
  //
  // Future<String> getGuideInvoiceJson() async {
  //   SharedPreferences prefs = await SharedPreferences.getInstance();
  //   return prefs.getString("guideInvoiceJson") ?? "";
  // }

  Future<void> saveGuideInvoiceMap(String key, Map<String, dynamic> map) async {
    final prefs = await SharedPreferences.getInstance();
    String jsonString = json.encode(map); // 将 Map 转换为 JSON 字符串
    await prefs.setString(key, jsonString); // 存储 JSON 字符串
  }

  Future<Map<String, dynamic>> getGuideInvoiceMap(String key) async {
    final prefs = await SharedPreferences.getInstance();
    String? jsonString = prefs.getString(key); // 获取 JSON 字符串

    if (jsonString != null) {
      return json.decode(jsonString); // 将 JSON 字符串解析为 Map
    }
    return {}; // 如果没有数据，则返回空 Map
  }

  /// 从本地存储加载数据
  static Future<void> loadFromLocal() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    instance.token = prefs.getString('token') ?? "";
    instance.isNeedGuide = prefs.getBool("isNeedGuide") ?? true;
  }

  /// 保存数据到本地存储
  Future<void> saveToLocal() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setString('token', token);
    prefs.setBool("isNeedGuide", isNeedGuide);
  }

  /// 清除本地存储数据
  static Future<void> clearLocal() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.remove("token");

    instance.clear();
  }
}
